package com.arrbinarytree;

public class ArrBinaryTree {
    //用于存储数据节点的数组
    private int[] arr;

    public ArrBinaryTree(int[] arr) {
        this.arr = arr;
    }

    //

    /**
     * 顺序存储二叉树的前序遍历
     *
     * @param index 从数组的第index开始遍历
     */
    public void preOrder(int index) {
        //数组不能为空，不能不含有元素
        if (arr == null || arr.length == 0) {
            System.out.println("数组为空，不能遍历二叉树");
        }
        //前序遍历先输出自己
        System.out.print(arr[index]+" ");
        //左递归遍历，本节点的左子节点为2n+1
        if (2 * index + 1 < arr.length) {
            preOrder(2 * index + 1);
        }
        //右递归
        if (2 * index + 2 < arr.length) {
            preOrder(2 * index + 2);
        }

    }

    /**
     * 顺序存储二叉树中序遍历
     */
    public void infixOrder(int index){
        //数组不能为空，数组中必须含有元素
        if(arr == null || arr.length == 0){
            System.out.println("数组不能为空，不能遍历二叉树");
        }
        if(2* index +1 < arr.length){
           infixOrder(2*index+1);
        }
        System.out.print(arr[index]+" ");
        if(2*index+2<arr.length){
            infixOrder((2*index+2));
        }
    }
    /**
     * 顺序存储二叉树中序遍历
     */
    public void postOrder(int index){
        //数组不能为空，数组中必须含有元素
        if(arr == null || arr.length == 0){
            System.out.println("数组不能为空，不能遍历二叉树");
        }
        if(2* index +1 < arr.length){
            postOrder(2*index+1);
        }
        if(2*index+2<arr.length){
            postOrder((2*index+2));
        }
        System.out.print(arr[index]+" ");

    }



}
